package com.jk1123.reference.phantom;

import java.lang.ref.PhantomReference;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author huyoufu <https://github.com/huyoufu>
 * @TIME 2021-08-20 19:18
 * @description 虚引用测试
 */
public class PhantomTest {
    public static void main(String[] args) throws InterruptedException {


        //创建虚引用队列
//        ReferenceQueue referenceQueue = new ReferenceQueue<>();
//        List<PhantomReference> list=new ArrayList<>();
//        for (int i = 0; i < 1; i++) {
//
//            byte[] buff=new byte[1024*1024];
//            list.add(new PhantomReference<>(buff,referenceQueue));
//
//        }
//        System.out.println(referenceQueue);
//
//        System.gc();
//        Reference poll = referenceQueue.poll();
//
//
//        System.out.println(poll);


        //java nio体系中


        Thread.sleep(5000);
        System.out.println(new Date());
        //堆外内存空间   不受 java垃圾回收 控制
        ByteBuffer byteBuffer=ByteBuffer.allocateDirect(1024*1024*1000);

        //代码 使用 byteBuffer 对象

        //本身没有提供 主动释放  该堆外内存的方法



        Thread.sleep(10000);
        System.out.println(new Date());
        byteBuffer=null;
        System.gc();
        System.out.println("~~~~~~~~~~~~~~~~~~");
        Thread.sleep(30000);
        System.out.println(new Date());





    }


}
